<script setup lang="ts">
	import { onLaunch, onShow, onHide } from '@dcloudio/uni-app';
	import { queryShopConfigV2, queryAppVersions } from '@/core/api';
	import type { Response, ShopConfigType } from '@/core/models';
	import { useShopConfigStore } from '@/core/store';
	import { useNetWorkHook } from '@/core/hooks';
	
	/** 获取项目配置 */
	const shopConfigStore = useShopConfigStore();
	const useNetWork = useNetWorkHook();
	
	onLaunch(() => {
		getShopConfigV2();
		/** 版本设置 */
		const version = '0.7.4'
		/** 开发环境才提示，生产环境不会提示 */
		if (process.env.NODE_ENV === 'development') {
			console.log(`\n %c \u6838\u5fc3\u5546\u57ce\u7cfb\u7edf\u0020\u0043\u006f\u0072\u0065\u0053\u0068\u006f\u0070 V${version} %c \u0068\u0074\u0074\u0070\u0073\u003a\u002f\u002f\u0077\u0077\u0077\u002e\u0063\u006f\u0072\u0065\u0073\u0068\u006f\u0070\u002e\u0063\u006e\u002f \n\n`, 'color: #ffffff; background: #3c9cff; padding:5px 0;', 'color: #3c9cff;background: #f1f1f1; padding:5px 0;');
		}

		/** 微信小程序检测更新措施，方式更新功能后，要等待24小时内才刷新的问题。 */
		// #ifdef MP-WEIXIN
		autoUpdate();
		// #endif

		/** app更新检测 */
		// #ifdef APP-PLUS || APP-PLUS-NVUE
		checkVersion()
		// #endif
	})
	
	onShow(() => {
		console.log('App Show');
		useNetWork.checkNetworkStatus();
		useNetWork.subscriptionNetworkStatusChange();
	})
	
	onHide(() => {
		console.log('App Hide')
		useNetWork.offNetworkStatusChange();
		useNetWork.setNetWorkStatusToDefault();
	})

	const getShopConfigV2 = async () => {
		shopConfigStore.querySystemConfig();
	}

	const autoUpdate = () => {
		/** 获取小程序更新机制兼容 */
		if (wx.canIUse('getUpdateManager')) {
			const updateManager = wx.getUpdateManager()
			/** 1. 检查小程序是否有新版本发布 */
			updateManager.onCheckForUpdate(function (res) {
				/** 请求完新版本信息的回调 */
				if (res.hasUpdate) {
					/** 检测到新版本，需要更新，给出提示 */
					uni.showModal({
						title: '更新提示',
						content: '检测到新版本，是否下载新版本并重启小程序？',
						success: function (res) {
							if (res.confirm) {
								/** 2. 用户确定下载更新小程序，小程序下载及更新静默进行 */
								downLoadAndUpdate(updateManager)
							} else if (res.cancel) {
								/** 用户点击取消按钮，需要强制更新，二次弹窗 */
								uni.showModal({
									title: '温馨提示~',
									content: '本次版本更新涉及到新的功能添加，旧版本无法正常访问的哦~',
									showCancel: false,
									confirmText: "确定更新",
									success: function (res) {
										if (res.confirm) {
											/** 下载新版本，并重新应用 */
											downLoadAndUpdate(updateManager)
										}
									}
								})
							}
						}
					})
				}
			})
		} else {
			/** 如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示 */
			uni.showModal({
				title: '提示',
				content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。'
			})
		}
	}

	const downLoadAndUpdate = (updateManager : any) => {
		uni.showLoading();
		/** 静默下载更新小程序新版本 */
		updateManager.onUpdateReady(function () {
			uni.hideLoading()
			/** 新的版本已经下载好，调用 applyUpdate 应用新版本并重启 */
			updateManager.applyUpdate()
		})
		updateManager.onUpdateFailed(function () {
			// 新的版本下载失败
			uni.showModal({
				title: '已经有新版本了哟~',
				content: '新版本已经上线啦~，请您删除当前小程序，重新搜索打开哟~',
			})
		})
	}

	const checkVersion = () => {
		let version = plus.runtime.version;
		console.log('版本号：' + version);
		/** 检测当前平台，如果是安卓则启动安卓更新 */
		uni.getSystemInfo({
			success: res => {
				console.log('当前平台：' + res.platform);
				if (res.platform == 'android') {
					updateHandler(version);
				}
			}
		})
	}

	const updateHandler = async (version : any) => {
		const appVersions : Response<any> = await queryAppVersions();
		if (appVersions.status && appVersions.data?.version && appVersions.data?.version > version) {
			uni.showModal({
				title: '更新提示',
				content: appVersions.data.note,
				success(resOpen) {
					if (resOpen.confirm) {
						plus.runtime.openURL(appVersions.data.android);
					}
				}
			})
		}
	}
</script>

<style lang="scss">
	page {
		height: 100%;
	}

	@import './static/css/common.scss';
</style>